/**
 * 有5台打印机打印文件，每台打印机有自己的待打印队列。因为打印的文件内容有轻重缓急之分，所以队列中的文件有1~10不同的优先级，其中数字越大优先级越高。打印机会从自己的待打印队列中选择优先级最高的文件来打印。如果存在两个优先级一样的文件，则选择最早进入队列的那个文件。
 * 输入描述：\n每个输入包含1个测试用例，每个测试用例第1行给出发生事件的数量 N (0 < N < 1000)。\n接下来有 N 行，分别表示发生的事件。\n共有如下两种事件：\n1. "IN P NUM"，表示有一个拥有优先级 NUM 的文件放到了打印机 P 的待打印队列中。(0 < P  <= 5, 0 < NUM <= 10)；\n2. "OUT P"，表示打印机 P 进行了一次文件打印，同时该文件从待打印队列中取出。(0 < P <= 5)。\n\n输出描述：\n对于每个测试用例，每次"OUT P"事件，请在一行中输出文件的编号。如果此时没有文件可以打印，请输出"NULL"。\n文件的编号定义为："IN P NUM"事件发生第 X 次，此处待打印文件的编号为 X。编号从1开始。
 * map = {
    1: [{index: 1, weight: 1}, {index: 2, weight: 2},{index: 3, weight: 3}
    2: [{index: 4, weight: 1}]
  }
 */
function outputFile(n, testArr) {
  let map = new Map();
  let count = 1;
  for(let i = 0; i<testArr.length; i++) {
    let item = testArr[i].split(' ');
    if(item[0] === 'IN') {
      let mapKey = item[1]
      if(map.has(mapKey)) {
        let mapValue = map.get(mapKey);
        mapValue.push({
          index: count,
          weight: item[2]
        })
      } else {
        map.set(mapKey, []);
        map.get(mapKey).push({
          index: count,
          weight: item[2]
        })
      }
      count += 1;
      console.log(map, 999)
    } else if(item[0] === 'OUT') {
      let outKey = item[1];
      let outArr = map.get(outKey);
      outArr.sort((a, b) => {
        return b.weight - a.weight;
      })
      if(outArr[0]) {
        console.log(outArr[0].index);
        map.get(outKey).shift();
      } else {
        console.log('NULL');
      }
    }
  }
}
// let testData = [
//   "IN 1 1",
//   "IN 1 2",
//   "IN 1 3",
//   "IN 2 1",
//   "OUT 1",
//   "OUT 2",
//   "OUT 2"
// ]
let testData = [
  "IN 1 1",
  "IN 1 3",
  "IN 1 1",
  "IN 1 3",
  "OUT 1",
]
outputFile(7, testData);

